home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / demo / aga / IFT_Scopes1904.lha / IFT-Scope / scopext3.s < prev    next >
Text File  |  1992-09-02  |  7KB  |  323 lines

  1. ;
  2. ;########################################################################
  3. ; SCOPEXT3 - the high performance experience
  4. ; by Smack/Infect 220395
  5. ;########################################################################
  6. ; features: *sampling + playback at 36.8kHz (on normal PAL screen)
  7. ;           *hires 8-dot-wave
  8. ;########################################################################
  9. ; requires: -MC68020+
  10. ;           -OS V37+
  11. ;           -FAST RAM
  12. ; if the machine is too slow then the prog returns
  13. ;########################################################################
  14. ;
  15.  
  16.     incdir    includes:
  17.     include    os_macros.is
  18.     include    hardware-registers.is
  19. CALL    MACRO
  20.     jsr     (_LVO\1,a6)
  21.     ENDM
  22.  
  23.     section    code,code
  24. ;---DOSLIBRARY---------------------
  25.     move.l    4.w,a6
  26.     move.l    (378,a6),a0    ;LibList
  27.     lea    (dosname,pc),a1
  28.     CALL    FindName
  29.     move.l    d0,dosbase
  30.     move.l    d0,a6
  31.     cmp    #37,(20,a6)    ;lib_Version
  32.     bge.b    .dosok
  33.     moveq    #0,d0
  34.     rts
  35. .dosok    move.l    #titletxt,d1
  36.     CALL    PutStr
  37. ;---32 BIT CPU---------------------
  38.     move.l    4.w,a6
  39.     btst    #1,(297,a6)    ;ATTN_Flags(+1)
  40.     bne.b    .CPUok
  41.     move.l    #CPUtxt,d1
  42.     CALLDOS    PutStr
  43.     moveq    #0,d0
  44.     rts
  45. .CPUok    bsr.b    main0
  46.     tst    slow_counter
  47.     beq.b    .exit
  48.     move.l    #slowtxt,d1
  49.     CALLDOS    PutStr
  50. .exit    moveq    #0,d0
  51.     rts
  52. main0    include    startup_nocheck.is    *jumps to 'main'
  53.     include    dummysprites.is
  54.  
  55. **************************************************************
  56. dosname:    dc.b    "dos.library",0
  57. dosbase:    dc.l    0
  58.         dc.b    "$VER: "
  59. titletxt:    dc.b    "##SCOPEXT3## by Smack/Infect 220395",10,0
  60. cputxt:        dc.b    "REQUIRES 68020+ CPU!",10,0
  61. slowtxt:    dc.b    "SORRY, THIS MACHINE IS TOO SLOW!",10,0
  62. **************************************************************
  63.     even
  64. main
  65.     lea    cl1,a0
  66.     bsr    dummysprites
  67.  
  68. ;---INIT TIMING----------------------------------
  69.     lea    $dff000,a5
  70.     move    #1,(aud0per,a5)
  71.     move    #1,(aud1per,a5)
  72.     move    #96/2,(aud2per,a5)    ;period 96 = ca.36800 Hz
  73.     move    #1,(aud2len,a5)
  74.     move    #64,(aud0vol,a5)
  75.     move    #64,(aud1vol,a5)
  76.     move    #00,(aud2vol,a5)
  77.     move    #00,(aud3vol,a5)
  78.  
  79. ;---INIT PARALLEL PORT---------------------------
  80.     lea    ($bfd000),a1
  81.     move.b    #6,($200,a1)        *DDRA SEL and POUT output
  82.     move.b    #0,($1301,a1)        *DDRB PRB input
  83.     move.b    #2,(a1)            *PRA  POUT signal
  84.     or.b    #2,($1001,a1)        *FILTER OFF!!
  85.  
  86.     move.l    (smppt0,pc),a6
  87.  
  88.     move.l    (mainvbr,pc),a0
  89.     move.l    ($70,a0),oldlevel4
  90.     move.l    #sample_interrupt,($70,a0)
  91.     move.l    #frame_interrupt,($6c,a0)
  92.     move.l    #key_interrupt,($68,a0)
  93.  
  94.     move    #$7fff,(adkcon,a5)
  95.     move.l    #cl1,(cop1lch,a5)
  96.     move    #1,(copjmp1,a5)
  97.     move    #$83e4,(dmacon,a5)    ;+ aud2 !!!!
  98.     move    #$c228,(intena,a5)    ;audio2+vblank+level2
  99.  
  100. main_loop
  101.     cmp.b    #$4d,keytaste    ** F10 down
  102.     beq.b    .dont
  103.     bsr    plot_wave
  104. .dont    clr    ready
  105.     cmp.b    #$4f,keytaste    ** F9 down
  106.     bne.b    .ww0
  107. .ww1    move    $dff006,$dff180
  108.     tst    ready
  109.     beq.b    .ww1
  110. .ww0    tst    ready
  111.     beq.b    .ww0
  112.     cmp    #3,slow_counter
  113.     bgt.b    .exit
  114.     cmp.b    #$74,keytaste        ** ESC up
  115.     bne.b    main_loop
  116.     clr    slow_counter
  117. .exit
  118.     move    #$7fff,$dff000+intena
  119.     move.l    (mainvbr,pc),a0
  120.     move.l    (oldlevel4,pc),($70,a0)
  121.     rts
  122.  
  123. *********************************************************
  124. ***** A6 register forbidden to use (sample pointer) *****
  125. *********************************************************
  126.  
  127. ;-------------------------------
  128. plot_wave
  129.     lea    (wave_pt0,pc),a0    ;double buf prev. frame
  130.     movem.l    (a0)+,d0/d1
  131.     exg    d0,d1
  132.     movem.l    d0/d1,-(a0)
  133.     lea    wpt1+2,a0
  134.     move    d1,(4,a0)
  135.     swap    d1
  136.     move    d1,(a0)
  137.  
  138.     lea    fastscr+129*128-36,a5    ;clear fast ram image
  139.     moveq    #0,d1
  140.     moveq    #0,d2
  141.     moveq    #0,d3
  142.     moveq    #0,d4
  143.     moveq    #0,d5
  144.     moveq    #0,d6
  145.     moveq    #0,d7
  146.     sub.l    a0,a0
  147.     sub.l    a1,a1
  148.     sub.l    a2,a2
  149.     sub.l    a3,a3
  150.     sub.l    a4,a4
  151.     move    #128,d0
  152. .clloop    movem.l    d1-a4,-(a5)
  153.     movem.l    d1-a3,-(a5)
  154.     sub    #36,a5
  155.     dbf    d0,.clloop
  156.  
  157.     move.l    (smppt0,pc),a0        ;plot to fast ram image
  158.     lea    fastscr+64*128,a2
  159.     move.b    (a0),d1
  160.     ext    d1
  161.     neg    d1
  162.     asr    d1
  163.     moveq    #7,d5
  164.     moveq    #92-1,d7
  165. .ploop    move.b    (a0)+,d0
  166.     ext    d0
  167.     neg    d0
  168.     asr    d0
  169.     move    d1,d2
  170.     add    d0,d2
  171.     asr    d2
  172.     move    d2,d6
  173.     lsl    #7,d6
  174.     bset    d5,(a2,d6)
  175.     move    d0,d3
  176.     add    d2,d3
  177.     asr    d3
  178.     move    d3,d6
  179.     lsl    #7,d6
  180.     bset    d5,(a2,d6)
  181.     move    d1,d4
  182.     add    d2,d4
  183.     asr    d4
  184.     move    d4,d6
  185.     lsl    #7,d6
  186.     bset    d5,(a2,d6)
  187.     add    d4,d1
  188.     lsr    d1
  189.     lsl    #7,d1
  190.     bset    d5,(a2,d1)
  191.     add    d2,d4
  192.     lsr    d4
  193.     lsl    #7,d4
  194.     bset    d5,(a2,d4)
  195.     add    d3,d2
  196.     lsr    d2
  197.     lsl    #7,d2
  198.     bset    d5,(a2,d2)
  199.     add    d0,d3
  200.     lsr    d3
  201.     lsl    #7,d3
  202.     bset    d5,(a2,d3)
  203.     move    d0,d1
  204.     lsl    #7,d0
  205.     bset    d5,(a2,d0)
  206.     dbf    d5,.ploop
  207.     addq    #1,a2
  208.     moveq    #7,d5
  209.     dbf    d7,.ploop
  210.  
  211.     lea    fastscr,a4        ;copy to video ram
  212.     move.l    (wave_pt0,pc),a5
  213.     move    #128,d0
  214. .coloop    REPT    2
  215.     movem.l    (a4)+,d1-a3    ;11
  216.     move.l    d1,(a5)+
  217.     move.l    d2,(a5)+
  218.     move.l    d3,(a5)+
  219.     move.l    d4,(a5)+
  220.     move.l    d5,(a5)+
  221.     move.l    d6,(a5)+
  222.     move.l    d7,(a5)+
  223.     move.l    a0,(a5)+
  224.     move.l    a1,(a5)+
  225.     move.l    a2,(a5)+
  226.     move.l    a3,(a5)+
  227.     ENDR
  228.     move.l    (a4)+,(a5)+
  229.     add    #36,a4
  230.     dbf    d0,.coloop
  231.     rts
  232.  
  233.  
  234. ************************************
  235. sample_interrupt
  236.     move.l    d0,-(a7)
  237.     move.b    $bfe101,d0    *PRB CIA-A
  238.     add.b    #$80,d0
  239.     move    #$0780,$dff000+intreq
  240.     move.b    d0,$dff000+aud0dat
  241.     move.b    d0,$dff000+aud1dat
  242.     move.b    d0,$dff000+aud2dat
  243.     move.b    d0,(a6)+
  244.     move.l    (a7)+,d0
  245.     rte
  246. ************************************
  247. frame_interrupt
  248.     movem.l    d0-d7/a0-a5,-(a7)
  249.     move    #$0020,$dff000+intreq
  250.     tst    ready
  251.     beq.b    .ok
  252.     addq    #1,slow_counter
  253. .ok    st    ready
  254.     lea    (smppt0,pc),a0
  255.     movem.l    (a0)+,d0/d1
  256.     exg    d0,d1
  257.     movem.l    d0/d1,-(a0)
  258.     move.l    d1,a6
  259.     movem.l    (a7)+,d0-d7/a0-a5
  260.     rte
  261. ************************************
  262. key_interrupt
  263.     movem.l    d0-d2,-(a7)
  264.     btst    #3,$bfed01    *ICR
  265.     beq.b    .nokey
  266.     move.b    $bfec01,keytaste    **get key
  267.     moveq    #2,d2
  268.     bsr.b    rasterwait
  269.     bset    #6,$bfee01        **INMODE
  270.     move.b    #0,$bfec01        **Handshake
  271.     bclr    #6,$bfee01        **OUTMODE
  272. .nokey    nop
  273.     move    #8,$dff000+intreq
  274.     movem.l    (a7)+,d0-d2
  275.     rte
  276. rasterwait            **input: d2 - number of lines to wait
  277. .rwait0    move.b    $dff006,d0
  278. .rwait1    move.b    $dff006,d1
  279.     cmp.b    d0,d1
  280.     beq.b    .rwait1
  281.     dbf    d2,.rwait0
  282.     rts
  283. ************************************
  284.  
  285. slow_counter    dc    0
  286. oldlevel4    dc.l    0
  287. keytaste    dc.b    0,0
  288. wave_pt0    dc.l    scr0
  289. wave_pt1    dc.l    scr1
  290. ready        dc    0
  291. smppt0        dc.l    smpbuf0
  292. smppt1        dc.l    smpbuf1
  293. *******************************************************
  294.     section    buff,bss
  295.     ds.b    1024
  296. fastscr    ds.b    128*129
  297.     ds.b    1024
  298. smpbuf0    ds.b    1024*2
  299. smpbuf1    ds.b    1024*2
  300. *******************************************************
  301.     section    screen,bss_c
  302.     ds.b    1024
  303. scr0    ds.b    92*129
  304. scr1    ds.b    92*129
  305.     ds.b    1024
  306. *******************************************************
  307.     section    chip,data_c
  308. dummy_sprite:    dc.l    0,0,0,0
  309.  
  310. picstrt    set    100
  311. backcol    set    $0412
  312. cl1    ds    32
  313.     dc    $1111,-2
  314.     dc    bpl1mod,0,bpl2mod,-92,bplcon1,$ff
  315.     dc    diwstrt,$1a6a,diwstop,$3ae0,ddfstrt,$28,ddfstop,$d8
  316.     dc    color00,$0001,color01,$0eee
  317. wpt1    dc    bpl0pth,0,bpl0ptl,0
  318.     dc    (picstrt<<8)+5,-2,bplcon0,$9001,color00,backcol
  319.     dc    ((picstrt+63)<<8)+9,-2,color00,backcol+$0555
  320.     dc    ((picstrt+64)<<8)+9,-2,color00,backcol
  321.     dc    ((picstrt+129)<<8)+5,-2,bplcon0,1,color00,1
  322.     dc    -1,-2
  323.